Amazon AppFlowでSlackのメッセージをS3に保存する
こんにちは、データアナリティクス事業本部プリセールススペシャリストの兼本です。
コードを書かずにSaaSアプリケーションとのデータ連携を実現する「AWS AppFlow」がリリースされたので、早速、Slackとの連携を試してみました。
フローを作成する
AWSマネジメントコンソールのAmazon AppFlowランディングページで、フローを新規作成します。
最初の手順ではフローの名称、データ暗号化のカスタマイズ、タグの設定を行えます。
なお、Amazon AppFlow では、アクセストークン、シークレットキー、および転送中のデータと保管中のデータが暗号化されています。デフォルトでは、フロー作成アカウントの AWS 管理キーで暗号化され、別のキーを使用したい場合のみ、暗号化設定のカスタマイズが必要となります。
次にデータ送信元を選択します。連携可能なサービスの一覧からSlackを選択します。
続いてSlackへの接続の詳細を設定します。
ここでは、Slackへの接続に必要なクライアントID、クライアントシークレット、ワークスペース名を指定するのですが、これらの設定が行われていない場合、ダイアログに記載されたSlackの管理画面で必要な設定を行います。
最後の「接続」には、任意の接続名を指定することができます。
Slack側の設定
フローを作成するにあたっては、対向サービスとなるSlack側でもいくつかの準備が必要になりますので、その点にも触れておきます。
フローの作成画面でも記載のある通り、Slackのアプリ管理ページにアクセスして、「Basic Information>App Credentials」にあるClient IDとClient Secretの2つの項目をSlackに接続するための情報として入力します。(アプリを作成していない場合は新規作成が必要です)
今回はSlackのメッセージを取得したいので、アプリの設定にある「Features>OAuth Tokens & Redirect URLs」ページの「OAuth Scope」の指定でchannels:history
を許可しておきます。
それと私は少しハマったのですが、このページでAmazon AppFlowへのリダイレクトURLを指定することを忘れないようにしてください。通常は、
https://[aws region].console.aws.amazon.com/appflow/oauth
のようになります。
Slack側の設定が完了したら、フロー作成画面に戻って接続設定を完了しましょう。以下のような画面が表示されたら「許可する」を押下することで、Amazon AppFlowからSlackへのアクセスができるようになります。
送信元(Slack)の詳細設定と送信先(S3)の設定
Slackの接続を指定すると、Slackオブジェクトの選択ができるようになります。Conversationsを選択(2020年4月24日現在、選択肢はこれだけ)して、ターゲットとなるSlackチャネルを選択します。
送信先にはAmazon S3を使います。こちらはデータ送信先として使用するバケット名とフォルダパスを入力します。
フロートリガーの設定
フローを実行するタイミング(トリガー)には、以下の3つが用意されています。 - オンデマンドで実行...フローはトリガーするとすぐに実行されます。
- スケジュール通りにフローを実行...フローは指定された時間に実行されます。
- イベントでフローを実行...イベントが発生すると、フローが実行されます。
今回作成したフローではイベント実行はグレーアウトされて選択できませんでした
設定が完了したら、「次へ」を押下してデータフィールドのマッピング画面に遷移します。
データフィールドをマッピング
このステップでは、送信元のフィールドを選択して、送信先のフィールドにマッピングすることができます。
フィールドを1対1でマッピングするだけでなく、式を使って複数のフィールドをひとつのフィールドにマッピングすることも可能です。
オプションとして、妥当性確認の設定ができ、数値フィールドの値が、0の場合、nullの場合、テキストを含む場合を条件として、フローを終了するかレコードを無視することができます。
フィルターの追加
次の画面では、フィルタを追加することができます。今回のフローではDate型のデータを含む「Timestamp」のみが選択可能になっており、日付を基準としてそれ以降、それ以前、範囲が指定できました。
「次へ」を押下すると設定の最終確認ページが表示されますので、これで問題なければ「フローを作成」を押下してフローを作成します。
フローの実行
フローの作成が完了したら、フロー右上にある「フローの実行」ボタンを押下することでフローを実行できます。
フローの実行が正常に終了したらS3バケットを確認します。ファイルが生成されていることが確認できました。(何度かテストしているのでファイルが複数あります)
ファイルの内容を確認すると、以下のようなJSON形式のデータが格納されていました。
ところで、このデータ、私が所属するデータアナリティクス事業本部の勤怠を報告するチャンネルのデータでして、JSONデータをAlteryxを使って紐解くとこんな感じになります。
まとめ
というわけで、Amazon AppFlowを使って、Slackのデータをコーディングなしに取り出し、Amazon S3に格納、ついでに格納されたJSONデータをAlteryxで解析してみました。
Amazon Appflowはまだリリースされたばかりで発展途上な印象ですが、可能性無限大だと思っています。今後のアップデートに期待大ですね。
以上、最後まで読んでいただきありがとうございました。